
### 项目五 超声波模块项目

**项目介绍：**

![image113](../media/2a0b40b983f1aead31d43e1662c4257e.png)

HC-SR04
超声波传感器利用声呐原理来测量物体的距离，就像蝙蝠那样。它具有出色的非接触式距离检测功能，精度高且读数稳定，使用方便。它配备有超声波发射器和接收器模块。

HC-SR04
或超声波传感器在众多电子项目中被广泛使用，用于创建障碍物检测和距离测量应用以及其他各种应用。在这里，我们带来了使用
Arduino 和超声波传感器测量距离的简单方法，以及如何将超声波传感器与
Arduino 配合使用。

**超声波参数：**

![image114](../media/9e771e017c2d1924a4e9bcf402b652f1.png)

工作电压：+5 伏

直流静态电流：\<2 毫安

工作电流：15 毫安

有效角度：\< 15°

测距范围：2 厘米 - 400 厘米

分辨率：0.3 厘米

测量角度：30 度

触发输入脉冲宽度：10 微秒

**项目组件：**

| UNO R3 开发板\*1                                        | L298P 电机驱动扩展板 V1\*1                              | LED白发红模块\*1                                        | HC-SR04超声波传感器\*1                                  |
|---------------------------------------------------------|---------------------------------------------------------|---------------------------------------------------------|---------------------------------------------------------|
| ![image115](../media/67417bd98f12bffd0352f76063e5abbd.png) | ![image116](../media/3dca1bdd1d1420c1d12b16cbf52fee00.png) | ![image117](../media/31fb938502d3d519813c391569d6a3f3.png) | ![image118](../media/393e74e8219e2ae066a43f5f19835ea0.png) |
| HX-2.54 4P 双头 连接线\*1                               | 3Pin 双母头杜邦线\*1                                    | USB线\*1                                                | 18650双节电池盒 (18650电池*2 (电池自配))* 1             |
| ![image119](../media/146f0fc8a39a7d767675ff130236d967.png) | ![image120](../media/07752ebfc8e8af62f1b86c4a725ea284.jpg) | ![image121](../media/2adb48888136bedc4d6b37d47a47b292.jpg) | ![image122](../media/c5bf59a8e5cdded95c02334369ab6fdd.png) |

**超声波模块知识：**

原理：看超声波的图可知，像是有两个眼睛，其一边是发射超声的，一边是接收超声波的，然后检测从发射遇到障碍物返回被接收到所需的时间t，再根据声音在空气中的传播速度大概是343m/s,

距离 = 速度 \* 时间 ，

由于超声波发射返回是两段路程了，所以需要除以2，故超声波测到的
距离=（速度 \* 时间）/2

超声波模块的使用方法及时序图：

1、使用GPIO引脚给SR04的Trig引脚至少10μs的高电平信号，触发SR04模块测距功能；

2、触发后，模块会自动发送8个40KHz的超声波脉冲，并自动检测是否有信号返回。这步会由模块内部自动完成。

3、如有信号返回，Echo引脚会输出高电平，高电平持续的时间就是超声波从发射到返回的时间。

![image123](../media/7d2dccb20acaf9b17c53063421a5faa0.png)

超声波模块的电路图

![image124](../media/6637578e3d2c6f902ee32931532a83ca.png)

**接线图：**

**⚠️特别注意：坦克智能车已经组装好了，这里不需要把传感器模块和其他的都拆下来又重新组装和接线，这里再次提供接线图，是为了方便您编写代码。但是，LED灯是需要另外连接上去的！**

接线注意：超声波传感器模块的VCC引脚连接至传感器扩展板的5v(V)，Trig引脚至数字12(S)，Echo引脚至数字13(S)，Gnd引脚至Gnd(G)。

![image125](../media/82e3d601ebcc5903b9bca322f5e5a4f4.png)

**项目代码：**

**认识代码块**

① 这个代码块，表示当启动ESP32这块开发板时，将运行代码。

![image126](../media/img-20250609173755.png)

② 设置串口。

![image127](../media/img-20250609175555.png)

设置串口波特率，一般波特率设置为`9600`或`115200`。

![image128](../media/img-20250609175618.png)

串口输出数据，从串行端口输出数据，分换行与不换行和HEX三种方式。

![image129](../media/img-20250609175645.png)

③ 向指定引脚设置 “输入” 或 “输出”，选择 “输入”
代表给该引脚设置输入模式；选择 “输出” 代表给引脚设置输出模式；选择
“输入上拉” 代表给该引脚设置输入模式并且使该引脚变成高电平。

![image130](../media/img-20250609175817.png)

④ 循环语句，顾名思义就是重复做一件事。

![image131](../media/img-20250609173827.png)

⑤ 读取超声波传感器检测到的距离值。

![image132](../media/img-20250610083838.png)

⑥ 将程序的执行暂停一段时间，也就是延时。单位是秒。

![image133](../media/img-20250609174003.png)

⑦ 创建变量。

![image134](../media/img-20250609174611.png)

这是创建“变量”的指令方块，可以声明“全局”或“局部”，还可以设置变量的类型、名称和赋值，item是变量名称。

![image135](../media/img-20250609174658.png)

获取变量item。

![image136](../media/img-20250609174714.png)

设置变量的值

![image137](../media/img-20250609174817.png)

设置变量item模式为每执行一次循环让item加1或每执行一次循环让item减1。

![image138](../media/img-20250609174841.png)

**组合代码块**

（**特别提醒：在上传程序代码前，需要把蓝牙模块取下，否则代码会上传失败。需要上传代码成功后，再连接蓝牙模块。**）

![image139](../media/img-20250610084822.png)

**项目结果：**

上传好测试代码到开发板，在串口监视器窗口单击
![image140](../media/img-20250610081124.png)
，设置波特率为9600，我们可以看到超声波模块显示的距离，单位是厘米。用手阻挡超声波模块，我们看到显示距离的数值变小了。

![image141](../media/img-20250610083416.png)

**项目拓展：**

我们刚刚测出了超声波显示的距离，那我们动动脑筋，能不能用测出的距离来做一些控制呢，如果控制一个LED灯的亮和灭。我们来试一下，在D9脚接上一个LED灯模块。

![image142](../media/d7cdc56d4c509c7f81bdc47d3ec6f4b5.png)

实验代码：

（**特别提醒：在上传程序代码前，需要把蓝牙模块取下，否则代码会上传失败。需要上传代码成功后，再连接蓝牙模块。**）

![image143](../media/img-20250610084213.png)

上传好测试代码到开发板，我们用手去靠近超声波传感器，看LED灯亮起来了没有。

**代码说明:**

![image144](../media/img-20250610084602.png)

将超声波传感器检测到的距离值赋给于变量 distance。

![image145](../media/img-20250610084314.png)

如果超声波传感器检测到的距离值（2≤distance≤10）的范围内，LED点亮；否则，LED不亮。